var input = File.ReadAllLines(Path.Combine(Path.GetDirectoryName(Util.CurrentQueryPath), "..", "day8.txt")).Select(i => i.Split(' ').ToList()).ToList();
(bool, int) Run(List> code)
{
var executed = new Dictionary();
var ptr = 0;
var acc = 0;
while (ptr < code.Count)
{
if (executed.ContainsKey(ptr))
return (false, acc);
executed[ptr] = 1;
var cmd = code[ptr];
switch (cmd[0])
{
case "acc":
acc += int.Parse(cmd[1]);
ptr++;
break;
case "nop":
ptr++;
break;
case "jmp":
ptr += int.Parse(cmd[1]);
break;
}
}
return (true, acc);
}
(_, var part1) = Run(input);
part1.Dump();
for (int i = 0; i < input.Count(); i++){
var altered = input.Select(o => o.Select(ii => ii).ToList()).ToList();
if (altered[i][0] == "nop"){
altered[i][0] = "jmp";
}
else if (altered[i][0] == "jmp"){
altered[i][0] = "nop";
}
else{
continue;
}
(var result, var part2) = Run(altered);
if (result == true){
part2.Dump();
}
}